import os
from pathlib import Path
import logging
from logging.handlers import RotatingFileHandler

# 项目根目录的绝对路径
BASE_DIR = Path(__file__).resolve().parent.parent.parent
# celery日志的绝对路径
LOGS_PATH = os.path.join(BASE_DIR, "logs")
if not os.path.exists(LOGS_PATH):
    os.makedirs(LOGS_PATH)

# 日志配置（集成ConcurrentRotatingFileHandler）
LOGGING_CONFIG = {
    "version": 1,
    "disable_existing_loggers": False,
    "formatters": {
        "verbose": {
            "format": "[{asctime}][{levelname}][{filename}:{module}:{lineno:d}:{funcName}]：{message}",
            "datefmt": "%Y-%m-%d %H:%M:%S",
            "style": "{",
        },
    },
    "handlers": {
        # 使用第三方的ConcurrentRotatingFileHandler
        "concurrent_file": {
            "level": "INFO",
            # 第三方处理器的类路径（固定写法）
            "class": "concurrent_log_handler.ConcurrentRotatingFileHandler",
            # 日志文件路径
            "filename": os.path.join(LOGS_PATH, "celery.log"),
            # 单个文件最大大小（5MB）
            "maxBytes": 10 * 1024 * 1024,
            # 保留备份文件数量
            "backupCount": 15,
            # 编码格式
            "encoding": "utf-8",
            # 日志格式
            "formatter": "verbose",
            # 可选：多进程安全的额外参数（如锁定超时） 版本≥ 0.9.19才能使用(linux/unix系统才能使用)
            # "lockTimeout": 5,  # 等待日志锁的超时时间（秒）
        },
    },
    "loggers": {
        # Celery相关日志会使用上述处理器
        "celery.worker": {
            "handlers": ["concurrent_file"],
            "level": "INFO",
            "propagate": True,
        },
        # 任务模块的日志也会被捕获
        "celery_app.tasks": {
            "handlers": ["concurrent_file"],
            "level": "INFO",
            "propagate": False,  # 避免重复日志
        },
    },
}
